import queue

class KeeperQue:

    """
    能够记录流经元素的队列

    elem_key 用于唯一标识进入队列的元素
    1. 如果元素曾经进入过队列, 则不再允许进入队列
    2. 如果元素进入队列, 则记录元素
    3. 进入过队列的元素能够通过elem_key获取最新版本的elem
    """

    def __init__(self) -> None:
        self.Que = queue.Queue()
        self.Keeper = set()
        self.count = 0
        pass

    def Put(self,elem:str) -> bool:
        """
        放入单个元素
        """
        if elem in self.Keeper:
            return False
        self.Que.put(elem)
        self.Keeper.add(elem)
        self.count += 1
        return True
    
    def Get(self) -> str:
        """
        获取队列头部元素
        """
        if self.Que.empty():
            return None
        self.count -= 1
        return self.Que.get()
    
    def Empty(self) -> bool:
        return self.Que.empty()
    
    def Size(self) -> int:
        return self.count

